#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
CrewAI 工具包装器
将现有的工具函数包装成 CrewAI 可以使用的 Tool
"""

from crewai.tools import tool
from .tushare_tool import (
    get_stock_price as _get_stock_price,
    get_stock_info as _get_stock_info,
    get_stock_history as _get_stock_history
)
from .tavily_tool import (
    search_stock_news as _search_stock_news,
    search_market_news as _search_market_news,
    search_industry_news as _search_industry_news
)
from .rate_limiter import api_rate_limiter


@tool("获取股票实时价格")
def get_stock_price_tool(stock_code: str) -> str:
    """
    获取股票实时价格和行情数据
    
    Args:
        stock_code: 股票代码（如 600519, 600000, 000001 等）
    
    Returns:
        股票实时价格信息，包括当前价、涨跌幅、成交量等
    
    Examples:
        get_stock_price_tool("600519")  # 贵州茅台
        get_stock_price_tool("600000")  # 浦发银行
    """
    api_rate_limiter.wait_if_needed()
    return _get_stock_price(stock_code)


@tool("获取股票基本信息")
def get_stock_info_tool(stock_code: str) -> str:
    """
    获取股票的基本信息和公司资料
    
    Args:
        stock_code: 股票代码（如 600519, 600000, 000001 等）
    
    Returns:
        股票基本信息，包括公司名称、所属行业、上市市场等
    
    Examples:
        get_stock_info_tool("600519")  # 获取贵州茅台公司信息
        get_stock_info_tool("600000")  # 获取浦发银行公司信息
    """
    api_rate_limiter.wait_if_needed()
    return _get_stock_info(stock_code)


@tool("获取股票历史数据")
def get_stock_history_tool(stock_code: str, days: int = 30) -> str:
    """
    获取股票的历史K线数据
    
    Args:
        stock_code: 股票代码（如 600519, 600000, 000001 等）
        days: 获取最近多少天的数据，默认30天
    
    Returns:
        历史K线数据摘要，包括期间最高价、最低价、涨跌幅等
    
    Examples:
        get_stock_history_tool("600519", 30)  # 获取贵州茅台近30天数据
        get_stock_history_tool("600000", 5)   # 获取浦发银行近5天数据
    """
    api_rate_limiter.wait_if_needed()
    return _get_stock_history(stock_code, days)


@tool("搜索股票新闻")
def search_stock_news_tool(keyword: str, max_results: int = 5) -> str:
    """
    搜索股票相关的最新新闻
    
    Args:
        keyword: 搜索关键词（股票代码或公司名称，如"贵州茅台"、"600519"）
        max_results: 返回新闻条数，默认5条
    
    Returns:
        股票相关新闻列表，包括标题、摘要、来源链接
    
    Examples:
        search_stock_news_tool("贵州茅台", 5)  # 搜索贵州茅台相关新闻
        search_stock_news_tool("600519", 3)    # 搜索茅台股票新闻
    """
    api_rate_limiter.wait_if_needed()
    return _search_stock_news(keyword, max_results)


@tool("搜索市场新闻")
def search_market_news_tool(topic: str = "A股市场", max_results: int = 5) -> str:
    """
    搜索股市整体新闻和市场动态
    
    Args:
        topic: 主题关键词，默认"A股市场"
        max_results: 返回新闻条数，默认5条
    
    Returns:
        市场整体新闻列表
    
    Examples:
        search_market_news_tool("A股市场", 5)
        search_market_news_tool("上证指数", 3)
    """
    api_rate_limiter.wait_if_needed()
    return _search_market_news(topic, max_results)


@tool("搜索行业新闻")
def search_industry_news_tool(industry: str, max_results: int = 3) -> str:
    """
    搜索特定行业的新闻和动态
    
    Args:
        industry: 行业名称（如"银行"、"食品饮料"、"科技"等）
        max_results: 返回新闻条数，默认3条
    
    Returns:
        行业相关新闻列表
    
    Examples:
        search_industry_news_tool("银行", 3)
        search_industry_news_tool("食品饮料", 5)
    """
    api_rate_limiter.wait_if_needed()
    return _search_industry_news(industry, max_results)


# 工具集合 - 按职责分组
STOCK_DATA_TOOLS = [
    get_stock_price_tool,
    get_stock_info_tool,
    get_stock_history_tool
]

NEWS_TOOLS = [
    search_stock_news_tool,
    search_market_news_tool,
    search_industry_news_tool
]

ALL_TOOLS = STOCK_DATA_TOOLS + NEWS_TOOLS

